/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import gestionform.GestionAdministrateur;
import gestionform.GestionConnexion;
import gestionform.GestionCandidat;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.Administrateur;
import model.Candidat;
import model.Utilisateur;
import utils.TypeUtilisateur;

/**
 *
 * @author Paul
 */
public class Connexion extends HttpServlet {

    public static final String ATT_USER = "utilisateur";
    public static final String ATT_GESTION_CONNEXION = "gConnexion";
    public static final String ATT_SESSION_USER = "sessionUtilisateur";
    public static final String VUE_CONNEXION = "/view/connexion.jsp";
    public static final String ATT_SESSION_ADMINISTRATEUR = "administrateur";
    public static final String ATT_SESSION_CANDIDAT = "candidat";
    public static final String SERVLET_CANDIDATURES = "/ServletCandidatures";
    public static final String SERVLET_CANDIDATS = "/ServletCandidats";

    /**
     *
     * @throws ServletException
     */
    @Override
    public void init() throws ServletException {
    }

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /* Affichage de la page de connexion */
        this.getServletContext().getRequestDispatcher(VUE_CONNEXION).forward(request, response);
    }

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /* Préparation de l'objet GestionConnexion */
        GestionConnexion gConnexion = new GestionConnexion();
        /* Traitement de la requête et récupération du bean en résultant */
        Utilisateur u = gConnexion.connexionUtilisateur(request);
        /* Récupération de la session depuis la requête */
        HttpSession session = request.getSession();
        if (gConnexion.getErreurs().isEmpty()) {
            session.setAttribute(ATT_SESSION_USER, u);
            if (TypeUtilisateur.CANDIDAT.getNomTypeUtilisateur().equals(u.getTypeUtilisateur())) {
                GestionCandidat gCandidat = new GestionCandidat();
                Candidat c = gCandidat.connexionEtudiant(u);
                session.setAttribute(ATT_SESSION_CANDIDAT, c);
                this.getServletContext().getRequestDispatcher(SERVLET_CANDIDATURES).forward(request, response);
            } else if (TypeUtilisateur.ADMINISTRATEUR.getNomTypeUtilisateur().equals(u.getTypeUtilisateur())) {
                GestionAdministrateur gAdministrateur = new GestionAdministrateur();
                Administrateur a = gAdministrateur.connexionAdministrateur(u);
                session.setAttribute(ATT_SESSION_ADMINISTRATEUR, a);
                this.getServletContext().getRequestDispatcher(SERVLET_CANDIDATS).forward(request, response);
            }
        } else {
            session.setAttribute(ATT_SESSION_USER, null);
            session.setAttribute(ATT_GESTION_CONNEXION, gConnexion);
            this.getServletContext().getRequestDispatcher(VUE_CONNEXION).forward(request, response);
        }
    }
}
